#ifndef xpack_math_cells
#define xpack_math_cells
#pragma push_macro("xuser")
#undef  xuser
#define xuser mixc::math_cells::inc
#include"define/base_type.hpp"
#include"macro/xexport.hpp"
#include"macro/xstruct.hpp"
#pragma pop_macro("xuser")

namespace mixc::math_cells{
    #define xarg_name       cells
    #define xarg_a0         rows
    #define xarg_a1         columns
    #define xarg_a2         pages
    #include"math/private/xgen.geometry.hpp"
}

namespace mixc::math_cells::origin{
    template<class rows_t, class columns_t = rows_t, class pages_t = void>
    using cells = mixc::math_cells::cells<rows_t, columns_t, pages_t>;

    //                   r    c
    using cls2b  = cells<u08, u08>;
    using cls2w  = cells<u16, u16>;
    using cls2d  = cells<u32, u32>;
    using cls2q  = cells<u64, u64>;
    using cls2u  = cells<uxx, uxx>;
    using cls2bx = cells<i08, i08>;
    using cls2wx = cells<i16, i16>;
    using cls2dx = cells<i32, i32>;
    using cls2qx = cells<i64, i64>;
    using cls2x  = cells<ixx, ixx>;
    using cls2s  = cells<f32, f32>;
    using cls2f  = cells<f64, f64>;

    //                   r    c    p
    using cls3b  = cells<u08, u08, u08>;
    using cls3w  = cells<u16, u16, u16>;
    using cls3d  = cells<u32, u32, u32>;
    using cls3q  = cells<u64, u64, u64>;
    using cls3u  = cells<uxx, uxx, uxx>;
    using cls3bx = cells<i08, i08, i08>;
    using cls3wx = cells<i16, i16, i16>;
    using cls3dx = cells<i32, i32, i32>;
    using cls3qx = cells<i64, i64, i64>;
    using cls3x  = cells<ixx, ixx, ixx>;
    using cls3s  = cells<f32, f32, f32>;
    using cls3f  = cells<f64, f64, f64>;
}

#endif

xexport_space(mixc::math_cells::origin)
